package java19_1_8.abstract_test;

/**
 * @author yuisama
 * @date 2022/01/08 10:09
 **/
public abstract class CaffeineBeverage {
    // 制作流程是标准化的，封装到父类中
    // 子类只有使用权不能修改
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        if (isCustomerWantsCondiments()) {
            addCondiments();
        }
    }
    // 对于浸泡和加调味品来说，不同子类实现细节不同，延迟到子类中去具体实现
    public abstract void brew();
    public abstract void addCondiments();

    public void pourInCup() {
        System.out.println("pouring into cup");
    }

    public void boilWater() {
        System.out.println("boiling water");
    }

    public boolean isCustomerWantsCondiments() {
        return true;
    }
}